|
P32A 001000 |
rt |
rs |
sa |
PRECR_SRA.PH.W 0 |
1111001 |
101 |
|
P32A 001000 |
rt |
rs |
sa |
PRECR_SRA_R.PH.W 1 |
1111001 |
101 |
|
6 |
5 |
5 |
5 |
1 |
7 |
3 |
PRECR_SRA[_R].PH.W |
Precision Reduce Two Integer Words to Halfwords after a Right Shift | |
PRECR_SRA.PH.W rt, rs, sa |
DSP-R2 |
Precision Reduce Two Integer Words to Halfwords after a Right Shift |
PRECR_SRA_R.PH.W rt, rs, sa |
DSP-R2 |
Precision Reduce Two Integer Words to Halfwords after a Right Shift |
Precision Reduce Two Integer Words to Halfwords after a Right Shift
Do an arithmetic right shift of two integer words with optional rounding, and then reduce the precision to halfwords.
rt = (round(rt>>shift))15..0 || (round(rs>>shift))15..0
The two words in registers rs and rt are right shifted arithmetically by the specified shift amount sa to create interim results. The 16 least-significant bits of each interim result are then written to the corresponding elements of destination register rt.
In the rounding version of the instruction, a value of 1 is added at the most-significant discarded bit position after the shift is performed. The 16 least-significant bits of each interim result are then written to the corresponding elements of destination register rt.
The shift amount sa is interpreted as a five-bit unsigned integer taking values between 0 and 31.
This instruction does not write any bits of the ouflag field in the DSPControl register.
No data-dependent exceptions are possible.
The operands must be a value in the specified format. If they are not, the results are UNPREDICTABLE and the values of the operand vectors become UNPREDICTABLE.
PRECR_SRA.PH.W
ValidateAccessToDSP2Resources()
if (sa4..0 = 0) then
tempB15..0 = GPR[rt]15..0
tempA15..0 = GPR[rs]15..0
else
tempB15..0 = ( (GPR[rt]31)sa || GPR[rt]31..sa )
tempA15..0 = ( (GPR[rs]31)sa || GPR[rs]31..sa )
endif
GPR[rt]31..0 = tempB15..0 || tempA15..0
PRECR_SRA_R.PH.W
ValidateAccessToDSP2Resources()
if (sa4..0 = 0) then
tempB16..0 = ( GPR[rt]15..0 || 0 )
tempA16..0 = ( GPR[rs]15..0 || 0 )
else
tempB32..0 = ( (GPR[rt]31)sa || GPR[rt]31..sa-1 ) + 1
tempA32..0 = ( (GPR[rs]31)sa || GPR[rs]31..sa-1 ) + 1
GPR[rt]31..0 = tempB16..1 || tempA16..1
Reserved Instruction, DSP Disabled